package com.zhj;

import com.zhj.config.MybatisConfig;
import com.zhj.domain.Account;
import com.zhj.mappers.AccountMapper;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * 　　　　　　　   ┏┓　   ┏┓+ +
 * 　　　　　　　┏┛┻━━━┛┻┓ + +
 * 　　　　　　　┃　　　　　　　┃
 * 　　　　　　　┃　　　━　　　┃ ++ + + +
 * 　　　　　　 ████━████ ┃+
 * 　　　　　　　┃　　　　　　　┃ +
 * 　　　　　　　┃　　　┻　　　┃
 * 　　　　　　　┃　　　　　　　┃ + +
 * 　　　　　　　┗━┓　　　┏━┛
 * 　　　　　　　　　┃　　　┃
 * 　　　　　　　　　┃　　　┃ + + + +
 * 　　　　　　　　　┃　　　┃			God beast body, code no BUG
 * 　　　　　　　　　┃　　　┃ +			神兽护体,代码无BUG
 * 　　　　　　　　　┃　　　┃
 * 　　　　　　　　　┃　　　┃　　+
 * 　　　　　　　　　┃　 　　┗━━━┓ + +
 * 　　　　　　　　　┃ 　　　　　　　┣┓
 * 　　　　　　　　　┃ 　　　　　　　┏┛
 * 　　　　　　　　　┗┓┓┏━┳┓┏┛ + + + +
 * 　　　　　　　　　　┃┫┫　┃┫┫
 * 　　　　　　　　　　┗┻┛　┗┻┛+ + + +
 *
 * @title:
 * @author zhonghaijun
 * @date 2020/7/15
 */
public class SpringApplicationDemo {

	/**
	 * 核心模块：spring-core， spring-beans，spring-context，spring-context-support，和spring-expression
	 *
	 * spring-context：以core和beans模块为基础构建，提供上下文的构建
	 * spring-context-support：模块整和了第三方库
	 * spring-expression：模块提供了表达式
	 * spring-aop： 切面模块
	 * spring-aspects： 提供AspectJ的集成
	 * spring-instrument： 类加载器的实现
	 * spring-instrument-tomcat：模块包含了支持Tomcat的植入代理
	 * spring-messaging：用于消息转递，类似于基于Spring MVC注释的编程模型
	 * spring-jdbc： 模块提供了一个JDBC –抽象层
	 * spring-tx：模块支持用于实现特殊接口和所有POJO（普通Java对象）的类的编程和声明式事务 管理
	 * spring-orm：模块为流行的对象关系映射(object-relational mapping )API提供集成层，包括JPA和Hibernate。使用spring-orm模块，您可以将这些O /
	 * 			   R映射框架与Spring提供的所有其他功能结合使用，例如前面提到的简单声明性事务管理功能
	 * spring-oxm：模块提供了一个支持对象/ XML映射实现的抽象层
	 * spring-jms：模块(Java Messaging Service) 包含用于生产和消费消息的功能。
	 * spring-web：模块提供基本的面向Web的集成功能，例如多部分文件上传功能，以及初始化一个使用了Servlet侦听器和面向Web的应用程序上下文的IoC容器。它还包含一个HTTP客户端和Spring的远程支持的Web相关部分。
	 * spring-webmvc：模块（也称为Web-Servlet模块）包含用于Web应用程序的Spring的模型-视图-控制器(MVC)和REST Web Services实现。
	 */


	public static void main(String[] args) {
		/**
		 * BeanFactory： 提供了基础方法
		 * ApplicationContext：提供更多的企业级功能（BeanFactory子接口），只负责实例化，配置，组装之前的beans，容器通过读取元数据进行实例化、配置和组装
		 * 开箱即用的ApplicationContext的实现类：
		 * 	1、ClassPathXmlApplicationContext
		 * 	2、FileSystemXmlApplicationContext
		 * 	3、AnnotationConfigApplicationContext  --> 支持web的变种：AnnotationConfigWebApplicationContext
		 *
		 * 	BeanDefinitionHolder 持有bean定义
		 *
		 * 	先执行 BeanPostDefinitionRegistryProcessor
		 * 		   BeanFactoryPostProcessor
		 *
		 *
		 */
		AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MybatisConfig.class);
		AccountMapper accountMapper = applicationContext.getBean(AccountMapper.class);
		accountMapper.insert(new Account());

	}
}
